package com.spring.cloub.study.lambda;

import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

import java.util.HashMap;
import java.util.ServiceLoader;
import java.util.function.BiPredicate;
import java.util.function.Function;

/**
 * created by YDW
 */
public class LambdaStudy {
    public static void main(String[] args) {

        //New<Integer,String,String> newxx = (x,y) -> x+y;

       // System.out.println( newxx.add(1,"222"));
        /**
         * Function接口的使用
         * 还有其他接口例如
         * Supplier(供给类型接口)
         */
        Function<Integer,Integer> function=n -> n*2;

        Integer a=function.apply(3);
        /**
         * 函数式接口的定义
         * lambda
         */
        DemoInterface demoInterface=  item -> item ;
        /**
         * 方法引用
         */
        DemoClass demoClass=new DemoClass();
        DemoInterface demoInterface1=demoClass::pirntIn;

        /**
         * 构造器引用
         */
        DemoInterface demoInterface2=String::new;
        String message1=demoInterface1.add("我是方法体调用");
        String message2=demoInterface2.add("我是构造器引用");
        String message=demoInterface.add("我是lambda");
        System.out.println(message);
        System.out.println(message1);
        System.out.println(message2);


        /**
         * mybatis_plus
         * biPredicate接口 断言接口
         * BiPredicate<T, U>
         * Predicate 接受一个参数
         * 针对两个参数,看两个参数是否符合某个条件表达式
         * 比较的接口
         */

        AbstractWrapper abstractWrapper=new QueryWrapper();
        BiPredicate<Integer,Integer> biPredicate= (param1,param2) -> param1==param2;
        System.out.println("abstractWrapper接口"+abstractWrapper.allEq(biPredicate,new HashMap(),false).toString());
        System.out.println("BiPredicate接口比较"+biPredicate.test(1,1));
    }

    public  static final class DemoClass{

        private String pirntIn(String message){
            return  message;
        }
    }
}


